public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}
class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        // 初始化两个指针和最终数组的最后一个位置
        int p1 = m - 1; // 指向nums1当前最大值的指针
        int p2 = n - 1; // 指向nums2当前最大值的指针
        int p = m + n - 1; // 指向nums1中合并后最后一个位置的指针

        // 当任一数组还有元素未处理时，继续合并
        while (p1 >= 0 && p2 >= 0) {
            // 比较两个数组的元素，把较大的元素放在nums1的末端
            if (nums1[p1] > nums2[p2]) {
                nums1[p] = nums1[p1];
                p1--;
            } else {
                nums1[p] = nums2[p2];
                p2--;
            }
            p--;
        }

        // 处理nums2中剩余的元素
        // 当nums1被处理完但nums2还有剩余时，直接拷贝到nums1的前面
        while (p2 >= 0) {
            nums1[p] = nums2[p2];
            p2--;
            p--;
        }
    }
}
